<template>
	<div class="wrapper">
		<!-- header部分 -->
		<header>
			<i class="fa fa-angle-left" @click="back"></i>
			<p>确认订单</p>
		</header>
		<!-- 订单信息部分 -->
		<div class="order-info">
			<div class="box">
				<h5>订单配送至：</h5>
				<div class="order-info-address" @click="toUserAddress">
					<p>{{deliveryaddress!=null?deliveryaddress.address:'请选择收货地址'}}</p>
					<i class="fa fa-angle-right"></i>
				</div>
				<p>{{deliveryaddress!=null?deliveryaddress.contactName:''}}
					{{deliveryaddress!=null?getSexText(deliveryaddress.contactSex):''}}
					{{deliveryaddress!=null?deliveryaddress.contactTel:''}}
				</p>
			</div>
		</div>
		<h3>{{business.businessName}}</h3>
		<!-- 订单明细部分 -->
		<div class="detail">
			<ul class="order-detailed">
				<li v-for="item in cartArr">
					<div class="order-detailed-left">
						<img :src="item.food.foodImg">
						<p>{{item.food.foodName}} x {{item.quantity}}</p>
					</div>
					<p>&#165;{{item.food.foodPrice*item.quantity}}</p>
				</li>
			</ul>
			<div class="order-deliveryfee">
				<p>配送费</p>
				<p>&#165;{{business.deliveryPrice}}</p>
			</div>
			<div class="order-deliveryfee">
				<p>{{ totalPoint }}积分(每10积分抵扣&#165;1.00)</p>
				<p>-&#165;{{del.toFixed(2)}}</p>
			</div>
			<div class="order-vip">
			<p>红包优惠</p>
			<p>-&#165;{{(NototalPrice-totalPrice).toFixed(2)}}</p>
			</div>
		</div>
		<!-- 合计部分 -->
		<div class="total">
			<div class="total-left">
				&#165;{{totalPrice.toFixed(2)}}
			</div>
			<div class="box">
				<div class="total-right" @click="toPayment;checkVipStatus();getuseQt()">
					提交订单
				</div>
			</div>
		</div>
	</div>
	<!-- 第一个对话框 -->
    <div v-if="centerDialogVisible" class="dialog-overlay">
        <div class="dialog">
            <div class="dialog-title">尊敬的vip用户</div>
            <div class="dialog-content">
                <span style="display: block; line-height: 1.5;">
                    是否需要使用红包？
                </span>
            </div>
            <div class="dialog-footer">
                <button @click="centerDialogVisible = false;toPayment()">取消</button>
                <button class="primary" @click="centerDialogVisible = false; useCupon()">
                    确认
                </button>
            </div>
        </div>
    </div>
    <!-- 第二个对话框 -->
    <div v-if="centerDialogVisible1" class="dialog-overlay">
        <div class="dialog">
            <div class="dialog-title">尊敬的vip用户</div>
            <div class="dialog-content">
                <span style="display: block; line-height: 1.5;">
                    红包已用完！
                </span>
            </div>
            <div class="dialog-footer">
                <button class="primary" @click="centerDialogVisible1 = false">
                    确认
                </button>
            </div>
        </div>
    </div>
</template>

<script>
import axios from 'axios';
	export default {
		name: 'Orders',
		data() {
			return {
				businessId: this.$route.query.businessId,
				business: {},
				user: {},
				cartArr: [],
				deliveryaddress: {},
				availablePointArr: [],
				centerDialogVisible: false,
            	centerDialogVisible1: false,
				vipDiscount: 0,
				NototalPrice: 0,
				useQt: 1, // 一次只能使用一张优惠券
				couponUsed: false

			}
		},
		created() {
			this.user = this.$getSessionStorage('user');
			this.deliveryaddress = this.$getLocalStorage(this.user.userId);

			//查询当前商家
			let businessUrl = `BusinessController/getBusinessById/${this.businessId}`;
			this.$axios.get(businessUrl).then(response => {
				this.business = response.data.result;
			}).catch(error => {
				console.error(error);
			});

			//查询当前用户在购物车中的当前商家食品列表
			let cartUrl = `CartController/listCart/${this.user.userId}`;
			this.$axios.get(cartUrl).then(response => {
				this.cartArr = response.data.result;
			}).catch(error => {
				console.error(error);
			});
			let pointsUrl=`PointsController/available/${this.user.userId}`;
			this.$axios.get(pointsUrl).then(response => {
				let result = response.data.result;
				this.availablePointArr = result;
			}).catch(error => {
				console.error(error);
			});
		},
		computed: {
			totalPoint() {
				let totalPoint = 0;
				for (let item of this.availablePointArr) {
					totalPoint += item.point;
				}
				return totalPoint;
			},
			del() {
				return Math.floor(this.totalPoint/10);
			},
			NototalPrice(){
				let NototalPrice = 0;
				for (let cartItem of this.cartArr) {
					NototalPrice += cartItem.food.foodPrice * cartItem.quantity;
				}
				NototalPrice += this.business.deliveryPrice;
				NototalPrice -= this.del;
				return NototalPrice*100/100;
			},
			totalPrice() {
				let totalPrice = 0;
				for (let cartItem of this.cartArr) {
					totalPrice += cartItem.food.foodPrice * cartItem.quantity;
				}
				totalPrice += this.business.deliveryPrice;
				totalPrice -= this.del;
				if (this.couponUsed) {
                totalPrice -= 5;
            }
				return totalPrice*100/100;
			}
		},
		methods: {
			
			back() {
				this.$router.go(-1);
			},
			getSexText(sex) {
				return sex === 1 ? '先生' : '女士';
			},
			toUserAddress() {
				this.$router.push({
					path: '/userAddress',
					query: {
						businessId: this.businessId
					}
				});
			},
			toPayment() {
				if (this.deliveryaddress == null) {
					alert('请选择送货地址！');
					return;
				}
				let url=`OrdersController/createOrders/${this.user.userId}/${this.businessId}/${this.deliveryaddress.daId}/${this.totalPrice}`
				//创建订单
				this.$axios.post(url).then(response => {
				    // 处理成功的响应
				    let orderId = response.data.result;
				    if (orderId > 0) {
				        this.$router.push({
				            path: '/payment',
				            query: {
				                orderId: orderId,
				                userId: this.user.userId,
				                reduction: this.del
				            }
				        });
				    } else {
				        alert('创建订单失败！');
				    }
				}).catch(error => {
				    // 处理错误
				    if (error.response) {
				        // 请求已发出，但服务器响应的状态码不在 2xx 范围内
				        console.error('Error status', error.response.status);
				        console.error('Error data', error.response.data.result);
				        alert('服务器错误: ' + error.response.status);
				    } else if (error.request) {
				        // 请求已发出但没有收到响应
				        console.error('No response received');
				        alert('没有收到服务器响应，请检查网络连接');
				    } else {
				        // 发送请求时出了点问题
				        console.error('Error creating the request');
				        alert('请求创建失败，请稍后再试');
				    }
				    console.error('Error message:', error.message);
				});
			},
			// 使用优惠券，若没有则提示
			useCupon() {
            this.user = this.$getSessionStorage('user');
            const vipRequest = {
                userId: this.user.userId,
                vipId: this.user.userId
            };
            let url = `VipController/updateCouponQuantity`;
            axios.put(url, vipRequest).then(response => {
                console.log(response.data.result);
                if (response.data.result > 0) {
                    //this.totalPrice = this.totalPrice - 5;
					this.couponUsed = true;
                    this.useQt = this.useQt - 1;
					console.log(this.totalPrice);
					console.log(this.NototalPrice);
                } else {
                    this.totalPrice = this.totalPrice;
                    this.centerDialogVisible1 = true;
                }
                this.useQt = this.useQt - 1;
                // 记录vip优惠价钱
                this.vipDiscount = Math.round((this.NototalPrice - this.totalPrice) * 100) / 100;
            }).catch(error => {
                console.error(error);
            });
        },
        // 只能用一张
        getuseQt() {
            console.log(this.useQt);
            if (this.useQt <= 0) {
                this.centerDialogVisible = false;
                this.toPayment();
            }
        },
        // 判断是会员才有优惠券弹窗
        async checkVipStatus() {
            const vipStatus = await this.isVip();
            if (vipStatus) {
                this.centerDialogVisible = true;
            } else {
                this.centerDialogVisible = false;
                this.toPayment();
            }
        },
        // 判断是否是vip
        async isVip() {
            this.user = this.$getSessionStorage('user');
            let url = `VipController/getVipById/${this.user.userId}`;
            try {
                const response = await axios.get(url);
                const vipStatus = response.data.result;
                console.log(vipStatus);
                return vipStatus;
            } catch (error) {
                console.error('Error fetching VIP status:', error);
                return false;
            }
        }
		}
	}
</script>

<style scoped>
	/****************** 总容器 ******************/
	.wrapper {
		width: 100%;
		height: 100%;
	}

	/****************** header部分 ******************/
	.wrapper header {
		width: 100%;
		height: 12vw;
		background-color: #01B0F2;
		font-size: 4.8vw;
		color: #fff;

		z-index: 10;

		display: flex;
		justify-content: flex-start;
		align-items: center;

		position: fixed;
		left: 0;
		top: 0;
	}

	.wrapper header i {
		margin: 0vw 0vw 0vw 3vw;
		font-size: 6vw;
		user-select: none;
		cursor: pointer;
	}

	.wrapper header p {
		margin: 0vw 0vw 0vw 33.5vw;
	}

	/****************** 订单信息部分 ******************/
	.wrapper .order-info {
		/*注意这里，不设置高，靠内容撑开。因为地址有可能折行*/
		width: 100%;
		background-color: #01B0F2;
		box-sizing: border-box;
		padding: 2vw 2vw;
		color: #fff;
		display: flex;
		justify-content: space-between;
		align-items: center;
	}

	.wrapper .order-vip {
		width: 100%;
		height: 16vw;
		box-sizing: border-box;
		padding: 3vw;
		color: #666;
		display: flex;
		justify-content: space-between;
		align-items: center;
		font-size: 3.5vw;
	}

	.wrapper .order-info .box {
		/*注意这里，不设置高，靠内容撑开。因为地址有可能折行*/
		width: 100%;
		margin-top: 12vw;
		background-color: #fff;
		box-sizing: border-box;
		padding: 2vw;
		color: black;
		border-radius: 2vw;
	}

	.wrapper .order-info h5 {
		font-size: 3vw;
		font-weight: 300;
	}

	.wrapper .order-info .order-info-address {
		width: 100%;
		display: flex;
		justify-content: space-between;
		align-items: center;
		font-weight: 700;
		user-select: none;
		cursor: pointer;
		margin: 1vw 0;
	}

	.wrapper .order-info .order-info-address p {
		width: 90%;
		font-size: 5vw;
	}

	.wrapper .order-info .order-info-address i {
		font-size: 6vw;
	}

	.wrapper .order-info p {
		font-size: 3.5vw;
	}

	.wrapper h3 {
		box-sizing: border-box;
		padding: 3vw;
		font-size: 4vw;
		color: #666;
		border-bottom: solid 1px #DDD;
	}

	/****************** 订单明细部分 ******************/
	.wrapper .detail {
		width: 100%;
		padding-bottom: 14vw;
	}

	.wrapper .order-detailed {
		width: 100%;
	}
	
	.wrapper .order-detailed li {
		width: 100%;
		height: 16vw;
		box-sizing: border-box;
		padding: 3vw;
		color: #666;
		display: flex;
		justify-content: space-between;
		align-items: center;
	}

	.wrapper .order-detailed li .order-detailed-left {
		display: flex;
		align-items: center;
	}

	.wrapper .order-detailed li .order-detailed-left img {
		width: 10vw;
		height: 10vw;
	}

	.wrapper .order-detailed li .order-detailed-left p {
		font-size: 3.5vw;
		margin-left: 3vw;
	}

	.wrapper .order-detailed li p {
		font-size: 3.5vw;
	}

	.wrapper .order-deliveryfee {
		width: 100%;
		height: 16vw;
		box-sizing: border-box;
		padding: 3vw;
		color: #666;
		display: flex;
		justify-content: space-between;
		align-items: center;
		font-size: 3.5vw;
	}

	/****************** 订单合计部分 ******************/
	.wrapper .total {
		width: 100%;
		height: 14vw;
		position: fixed;
		left: 0;
		bottom: 0;
		display: flex;
	}

	.wrapper .total .total-left {
		flex: 2;
		background-color: #505051;
		color: #fff;
		font-size: 4.5vw;
		font-weight: 700;
		user-select: none;
		display: flex;
		justify-content: center;
		align-items: center;
	}

	.wrapper .total .box {
		flex: 1;
		background-color: #505051;
		padding: 2vw 2vw;
	}

	.wrapper .total .box .total-right {
		width: 100%;
		height: 100%;
		background-color: #01B0F2;
		color: #fff;
		font-size: 4.5vw;
		font-weight: 700;
		user-select: none;
		cursor: pointer;
		display: flex;
		justify-content: center;
		align-items: center;
		border-radius: 8vw;
	}

	.dialog-overlay {
  position: fixed;
  top: 0;
  left: 0;
  width: 100vw;
  height: 100vh;
  background: rgba(0, 0, 0, 0.3); /* 背景半透明 */
  display: flex; /* 使用flex布局 */
  align-items: center; /* 垂直居中 */
  justify-content: center; /* 水平居中 */
}

.dialog {
  /* 原有样式基础上新增 */
  max-width: 400px; /* 限制最大宽度 */
  width: 90%; /* 适配不同屏幕宽度 */
  background: white;
  padding: 20px;
  border-radius: 8px;
  box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1);
}
</style>